#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    // 1，创建UDP通信端点
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    // 2，准备好自己的和对方的地址结构体
    struct sockaddr_in myaddr;
    bzero(&myaddr, sizeof(myaddr));
    myaddr.sin_family = AF_INET;
    myaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 自动获取本机IP
    myaddr.sin_port = htons(50001);

    // 3，绑定套接字与地址
    bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));

    // 4，静静地等待对方的消息
    char buf[100];
    struct sockaddr_in peeraddr;
    socklen_t len = sizeof(peeraddr);
    while(1)
    {
        bzero(buf, 100);
        bzero(&peeraddr, sizeof(peeraddr));

        recvfrom(sockfd, buf, 100, 0,
                 (struct sockaddr *)&peeraddr, &len);

        printf("收到[%s:%hu]的消息：%s",
                inet_ntoa(peeraddr.sin_addr),
                ntohs(peeraddr.sin_port),
                buf);
    }

    return 0;
}
